﻿using System;
using Scommesse.Model;
using Scommesse.View.Admin;

namespace Scommesse.Presenters.Admin
{
    class EventoPresenter : IEventoPresenter
    {
        private readonly EventoDialog _eventoDialog;
        private readonly Palinsesto _palinsesto;

        public EventoPresenter(EventoDialog dialog)
        {
            _eventoDialog = dialog;
            _eventoDialog.AddListener(this);
            _palinsesto = Palinsesto.GetPalinsesto();
            _eventoDialog.ShowDialog();
        }

        public void Load_View()
        {
            _eventoDialog.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
                                                DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second).AddMinutes(2); //aggiungo 2 minuti x test
            _eventoDialog.EventoEsistente = false;

            foreach (Categoria cat in _palinsesto.Categorie)
                _eventoDialog.AddCategoria = cat.Nome;
        }

        public void Load_Competizioni()
        {
            _eventoDialog.NomeCompetizione = "";
            String nomeCategoria = _eventoDialog.NomeCategoria;
            ICategoria cat = _palinsesto.GetCategoriaByName(nomeCategoria);

            foreach (Competizione comp in cat.Competizioni)
                _eventoDialog.AddCompetizione = comp.Nome;
        }

        public void ConfermaAggiungiEvento()
        {
            _eventoDialog.EventoEsistente = false;

            String nomeCategoria = String.Empty;
            String nomeCompetizione = String.Empty;

            String compA = _eventoDialog.CompetitoreA;
            if (String.IsNullOrEmpty(compA))
                _eventoDialog.CompAError =  "Inserisci il nome del competitore A";
            String compB = _eventoDialog.CompetitoreB;
            if (String.IsNullOrEmpty(compB))
                _eventoDialog.CompBError = "Inserisci il nome del competitore B";

            try
            {
                nomeCategoria = _eventoDialog.NomeCategoria;
            }
            catch
            {
                _eventoDialog.CategoriaError = "Seleziona una categoria";
            }

            try
            {
                nomeCompetizione = _eventoDialog.NomeCompetizione;
            }
            catch
            {
                _eventoDialog.CompetizioneError = "Seleziona una competizione";
            }

            DateTime date = _eventoDialog.Date;
            if (date.CompareTo(DateTime.Now) <= 0)
                _eventoDialog.DataError = "Non può essere inserito un evento con data che precede quella di oggi";

            if (!String.IsNullOrEmpty(nomeCategoria) && !String.IsNullOrEmpty(nomeCompetizione) &&
                !String.IsNullOrEmpty(compA) && !String.IsNullOrEmpty(compB) &&
                date.CompareTo(DateTime.Now) >= 0)

                AggiungiEvento(compA, compB, date, nomeCategoria, nomeCompetizione);
        }

        public void AggiungiEvento(String compA, String compB, DateTime data, String nomeCat, String nomeComp)
        {
            try
            {
                var comp = _palinsesto.GetCategoriaByName(nomeCat).GetCompetizioneByName(nomeComp);

                IEvento ev = comp.AddEvento(compA, compB, data);

                //DataSaver.SavePalinsestoOnFile(_palinsesto);

                _eventoDialog.Close();
            }
            catch
            {
                _eventoDialog.EventoEsistente = true;
            }
        }
    }
}
